1. Field of the Invention
This invention relates to apparatus and methods for managing persistent data in systems that can load multiple code images.
2. Background of the Invention
Multi-image systems are frequently used in enterprise environments to provide a safety net when updating to higher levels of code. Such systems may include two or more repositories (e.g., real or virtual hard drives) storing software or firmware referred to as “images.” One image (i.e., the active image) contains an existing code level, while the other image (i.e., the alternate image) contains a new code level. When the new code level is in place on the alternate image, the multi-image system allows the active image to be swapped with the alternate image, thereby allowing the new code level to run in the enterprise environment. If an issue is encountered with the new code level, the system may revert to the previous code level by swapping the images.
One advantage of multi-image update systems is their ability to minimize update and failure recovery time. Embodiments of such systems can be found in operating systems, hypervisor microcode, and even host adapter firmware. Regardless of the embodiment, such systems have to deal with “persistent data.” Typically, persistent data refers to information specific to a particular system, such as configuration information.
When dealing with persistent data, conventional multi-image update systems exhibit various deficiencies. For example, compatibility issues may arise between codes levels that use different persistent data formats. In some cases, the compatibility issues may be so severe that a multi-image system cannot be used. One solution for addressing this incompatibility is to overwrite both images. This solution, however, destroys any fallback capability.
Another problem with conventional multi-image update systems is their inability to transfer configuration changes between images. The persistent data associated with each image in a multi-image system is typically not synchronized. This is primarily because there is no guarantee that both code levels can handle the same data format. For this reason, conventional multi-image update systems typically maintain two copies of persistent data instead of a single shared copy. Consequently, if a parameter associated with a first code level is changed, the change will not be reflected in a second code level.
In view of the foregoing, what are needed are apparatus and methods to effectively manage the persistent data of multiple code images. Ideally, such apparatus and methods will be able to synchronize the persistent data of multiple code images even in cases where the code images, or the persistent data formats of the code images, are substantially different.